<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>then 方法</title>
</head>
<body>
    <script>
        let p = new Promise((resolve, reject) => {
            resolve('ok');
        });

        /**
         * 4.promise.then()返回的新promise的结果状态由什么决定?
            (1)简单表达: 由then()指定的回调函数执行的结果决定
            (2)详细表达:
                ①如果抛出异常, 新promise变为rejected, reason为抛出的异常
                ②如果返回的是非promise的任意值, 新promise变为resolved, value为返回的值
                ③如果返回的是另一个新promise, 此promise的结果就会成为新promise的结果 
         */
        let result = p.then(value=>{ // value 值
            //1. 抛出错误
            // throw '出错啦!!!';
            //2. 返回非 promise 值
            // return 123;
            // return {};
            //3. 返回是 promise 对象
            // return new Promise((resolve, reject) => {
            //     // resolve('ok');
            //     reject("error");
            // });
        }, reason=>{ // reason 原因
            console.error(reason);
        });


        //链式调用
        let p2 = new Promise((resolve, reject) => {
            // resolve('ok');
            reject('error');
        });

        p2.then(value=>{
            console.log(value)
        }, reason => {
            console.error(reason);
        }).then(value=>{
            console.log(value);
        }, reason=>{
            console.error(reason);
        });
    </script>
</body>
</html>